package com.atguigu.yygh.common.handler;

/*==========================================
      时 间:   2022-03-01
      讲 师:   刘  辉
      描 述:   尚硅谷教学团队
 ==========================================*/


import com.atguigu.yygh.common.exception.YYGHException;
import com.atguigu.yygh.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

//@ControllerAdvice+@ResponseBody
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {


    //统一返回一致的返回结果:全局统一异常处理
    @ExceptionHandler(value = {Exception.class})
    public R handleAllException(Exception ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        ex.printStackTrace();
        log.error("全局异常："+ex.getMessage());
        return R.error().message("出异常了..");
    }


    //特定异常处理:根据不同的异常，可以提示不同的信息
    @ExceptionHandler(value = {ArithmeticException.class})
    public R handleAllException(ArithmeticException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        ex.printStackTrace();
        log.error("数学异常："+ex.getMessage());
        return R.error().message("数学异常..");
    }

    //特定异常处理:根据不同的异常，可以提示不同的信息
    @ExceptionHandler(value = {SQLException.class})
    public R handleAllException(SQLException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        ex.printStackTrace();
        log.error("SQL异常："+ex.getMessage());
        return R.error().message("SQL异常..");
    }

    //自定义异常处理
    @ExceptionHandler(value = {YYGHException.class})
    public R handleYYGHException(YYGHException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        ex.printStackTrace();
        log.error("YYGHException异常："+ex.getMessage());
        return R.error().message(ex.getMessage());
    }

}
